package com.powerbank.device.service;

import com.powerbank.device.dto.DeviceCommandDTO;
import com.powerbank.device.dto.DeviceStatusDTO;
import com.powerbank.device.dto.SlotStatusDTO;

/**
 * MQTT消息服务接口
 */
public interface MqttMessageService {

    /**
     * 发送设备控制指令
     *
     * @param deviceCode 设备编码
     * @param command    控制指令
     * @return 是否发送成功
     */
    boolean sendDeviceCommand(String deviceCode, DeviceCommandDTO command);

    /**
     * 处理设备状态消息
     *
     * @param deviceCode 设备编码
     * @param status     设备状态
     */
    void handleDeviceStatus(String deviceCode, DeviceStatusDTO status);

    /**
     * 处理设备心跳消息
     *
     * @param deviceCode 设备编码
     * @param timestamp  心跳时间戳
     */
    void handleDeviceHeartbeat(String deviceCode, Long timestamp);

    /**
     * 处理插槽状态消息
     *
     * @param deviceCode 设备编码
     * @param slotStatus 插槽状态
     */
    void handleSlotStatus(String deviceCode, SlotStatusDTO slotStatus);

    /**
     * 处理设备响应消息
     *
     * @param deviceCode 设备编码
     * @param response   设备响应
     */
    void handleDeviceResponse(String deviceCode, String response);

    /**
     * 发送开锁指令
     *
     * @param deviceCode 设备编码
     * @param slotNo     插槽号
     * @return 是否发送成功
     */
    boolean sendUnlockCommand(String deviceCode, Integer slotNo);

    /**
     * 发送锁定指令
     *
     * @param deviceCode 设备编码
     * @param slotNo     插槽号
     * @return 是否发送成功
     */
    boolean sendLockCommand(String deviceCode, Integer slotNo);

    /**
     * 查询设备状态
     *
     * @param deviceCode 设备编码
     * @return 是否发送成功
     */
    boolean queryDeviceStatus(String deviceCode);

    /**
     * 查询插槽状态
     *
     * @param deviceCode 设备编码
     * @param slotNo     插槽号
     * @return 是否发送成功
     */
    boolean querySlotStatus(String deviceCode, Integer slotNo);
}